#!/bin/bash
# 功能: 启动零代码服务的脚本，使用时需注意，请结合自身的实际调整 BASE_DIR 变量
# 名称: start_thingx_singlehost.sh
# 作者: zxm
# 创建日期: 2024-11-25
# 版本: v1.0

echo -e "\e[1;33m请在执行脚本前根据实际情况调整临时环境变量设置!\e[0m\n"

# 基础目录
BASE_DIR=/uino

# 日志文件路径
LOGFILE="$BASE_DIR/tools/thingx_env.log"
# 确保日志文件存在
if [[ ! -f "$LOGFILE" ]]; then
    touch "$LOGFILE" # 创建日志文件
fi

# 服务路径
THINGX_HOME="$BASE_DIR/thingx/thingjsx-server"
ES_HOME="$BASE_DIR/elasticsearch-6.6.2"

# 清空日志文件
: >"$LOGFILE"

# 设置临时环境变量
export JAVA_HOME="$BASE_DIR/jdk_linux"
export JRE_HOME="$JAVA_HOME/jre"
export PATH="$JAVA_HOME/bin:$PATH"
export CLASSPATH=".:$JAVA_HOME/lib:$JRE_HOME/lib"

# 记录当前环境变量到日志文件
{
    echo "Current user: $USER"
    echo "Current PATH: $PATH"
    echo "Current JAVA_HOME: $JAVA_HOME"
    env
} >>"$LOGFILE"

# 检测非root用户
if [[ "$(id -u)" -eq 0 ]]; then
    echo -e "\e[1;31m此脚本必须以非root用户身份运行!\e[0m" 1>&2
    exit 1
fi

# 获取进程ID
get_pid() {
    local pid
    # pid=$(ps -ef | grep "$1" | grep -v grep | awk '{print $2}')
    pid=$(pgrep -f "$1")
    echo "$pid"
}

# 启动服务
start_service() {
    local service_name="$1"
    local search_pid="$2"
    local start_command="$3"
    local sleep_time="$4"

    echo -e "\e[1;34m正在检查 $service_name 服务...\e[0m"
    local pid
    pid=$(get_pid "$search_pid")
    if [[ -n "$pid" ]]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') 服务 $service_name 已存在，它的PID是 $pid" >>"$LOGFILE"
        echo -e "\e[1;34m$service_name 服务已在运行，PID: $pid\e[0m"
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 $service_name ..." >>"$LOGFILE"
        echo "Executing command: $start_command" >>"$LOGFILE"

        # 启动服务
        nohup sh -c "$start_command" >>"$LOGFILE" 2>&1 &
        if [[ $? -eq 0 ]]; then
            echo -e "\e[1;34m正在等待 $service_name 启动...\e[0m"
            sleep "$sleep_time"
            pid=$(get_pid "$search_pid")
            if [[ -n "$pid" ]]; then
                echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 $service_name 成功，PID是 $pid" >>"$LOGFILE"
                echo -e "\e[1;32m$service_name 启动成功，PID: $pid\e[0m"
            else
                echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 $service_name 失败，未能找到PID" >>"$LOGFILE"
                echo -e "\e[1;31m$service_name 启动失败，未能找到PID\e[0m"
            fi
        else
            echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 $service_name 失败" >>"$LOGFILE"
            echo -e "\e[1;31m$service_name 启动失败\e[0m"
        fi
    fi
}

# 启动 elasticsearch
start_service "elasticsearch" "${ES_HOME}/lib" "cd ${ES_HOME} && bin/elasticsearch -d -p es.pid 1>/dev/null" 20

# 启动 thingx
start_service "thingx" "${THINGX_HOME}" "cd ${THINGX_HOME} && bash bin/start.sh 1>/dev/null" 10

# 提示用户查看日志文件
echo -e "\e[1;32m服务启动完成，请使用以下命令查看日志文件：\e[0m"
echo -e "\e[1;33mtail -f $LOGFILE\e[0m"

# 结束脚本
exit 0
